brute force data structures divide and conquer hashing math *2500

Please click on ads to support us..

C++ Code:

#include<bits/stdc++.h>
#define M 5001
using namespace std;
mt19937_64 rnd(time(0));
int n,a[300001];
long long h[300001],base[300001],pre[300001];
inline int read()
{
	int k=0,f=0;char c=getchar();
	for(;!isdigit(c);c=getchar()) f|=c=='-';
	for(;isdigit(c);c=getchar()) k=(k<<1)+(k<<3)+(c^48);
	return f?-k:k;
}
void solve(){
	int n; n=read();
	for(int i = 1; i <= n; ++i){
		a[i]=read();
		h[i] = rnd();
		base[i] = base[i - 1] ^ h[i];
	}
	int ans = 0;
	for(int i = 1, j = 1; i <= n; ++i){
		pre[i] = pre[i - 1] ^ h[a[i]];
		if(a[i] == 1) j = 1, ++ans;
		else{
			j = max(j, a[i]);
			if(i >= j && (pre[i] ^ pre[i - j]) == base[j]) ++ans;
		}
	}
	reverse(a + 1, a + n + 1);
	for(int i = 1, j = 1; i <= n; ++i){
		pre[i] = pre[i - 1] ^ h[a[i]];
		if(a[i] == 1) j = 1;
		else{
			j = max(j, a[i]);
			if(i >= j && (pre[i] ^ pre[i - j]) == base[j]) ++ans;
		}
	}
	printf("%d\n",ans);
}
int main()
{
	solve();
	return 0;
}


Comments

Submit
0 Comments
More Questions

1614B - Divan and a New Project
791A - Bear and Big Brother
1452A - Robot Program
344A - Magnets
96A - Football
702B - Powers of Two
1036A - Function Height
443A - Anton and Letters
1478B - Nezzar and Lucky Number
228A - Is your horseshoe on the other hoof
122A - Lucky Division
1611C - Polycarp Recovers the Permutation
432A - Choosing Teams
758A - Holiday Of Equality
1650C - Weight of the System of Nested Segments
1097A - Gennady and a Card Game
248A - Cupboards
1641A - Great Sequence
1537A - Arithmetic Array
1370A - Maximum GCD
149A - Business trip
34A - Reconnaissance 2
59A - Word
462B - Appleman and Card Game
1560C - Infinity Table
1605C - Dominant Character
1399A - Remove Smallest
208A - Dubstep
1581A - CQXYM Count Permutations
337A - Puzzles